#遍历目录文件并求取SHA512的摘要值
import os
import multiprocessing
import hashlib

#定义进程大小
POOLSIZE=2 #工作进程的数量
#可以读取的缓冲区大小
BUFSIZE=8196

def mark(filename):
    try:
        f=open(filename,"rb")
    except IOError:
        return None
    digest=hashlib.sha512()
    while True:
        chunk=f.read(BUFSIZE)
        if not chunk:break
        digest.update(chunk)
    f.close()
    return filename,digest.digest()



def build_map(dir):
    #定义进程
    pool=multiprocessing.Pool(POOLSIZE)


    #os.path.join:拼接文件路径
    #根据文件目录和名称拼接
    all_files=(os.path.join(root,name)
               #循环遍历当前目录
               for root,dirs,files in os.walk(dir)
                   #取出当前目录下文件名
                   for name in files)

    #dict方法用于将结果转化成字典
    map=dict(pool.imap_unordered(mark,all_files,20))
    pool.close()
    return map


if __name__=="__main__":
    digest_map=build_map("/Users/zhaolixiang/Desktop/python/test1/进程")
    for item in  digest_map:
        print("文件目录：",item)
        print("SHA512摘要值：",digest_map[item])
    #个数
    print(len(digest_map))